import { ApiService } from '@core/net/api.service';
import { Injectable } from '@angular/core';
import { IHttpRes } from '@core/net/HttpResponse';
import { ISystemMenu, ISystemOrganize, ISystemRole, ISystemUser } from '@model/system';
import { forkJoin } from 'rxjs';

@Injectable({
	providedIn: 'root'
})
export class SystemService {

	constructor(
		private apiService: ApiService
	) { }

	/**
	 * 用戶列表
	 * @param params 
	 * @returns 
	 */
	getUserList(params): Promise<IHttpRes<Array<ISystemUser>>> {
		return this.apiService.get('/sys/user/list', params).toPromise();
	}

	/**
	 * 删除用户
	 * @param id 
	 * @returns 
	 */
	deleteUser(id: number): Promise<IHttpRes<any>> {
		return this.apiService.post('/sys/user/delete/' + id).toPromise();
	}

	/**
	 * 获取登入用户信息
	 * @param id 
	 * @returns 
	 */
	getUserInfo(id: string): Promise<IHttpRes<any>> {
		return this.apiService.get('/sys/user/info', { id }).toPromise();
	}


	/**
	 * 保存用户
	 * @param body 
	 * @returns 
	 */
	saveUser(body): Promise<IHttpRes<any>> {
		return this.apiService.post('/sys/user/save', body).toPromise();
	}



	/**
	 * 角色列表
	 * @param params 
	 * @returns 
	 */
	getRoleList(params): Promise<IHttpRes<Array<ISystemRole>>> {
		return this.apiService.get('/sysRole/list', params).toPromise();
	}

	/**
	 * 删除角色
	 * @param id 
	 * @returns 
	 */
	deleteRole(id: number): Promise<IHttpRes<any>> {
		return this.apiService.post('/sysRole/delete/' + id).toPromise();
	}


	/**
	 * 角色详情
	 * @param id 
	 * @returns 
	 */
	getRoleInfo(id: number): Promise<IHttpRes<any>> {
		return this.apiService.get('/sysRole/info/' + id).toPromise();
	}

	getRoleInfoList(ids: string[]): Promise<IHttpRes<any>> {
		const urls = [];
		ids.forEach(id => {
			urls.push(this.apiService.get('/sysRole/info/' + id))
		});

		return forkJoin(...urls).toPromise()
	}
	/**
	 * 新增角色
	 * @param body 
	 * @returns 
	 */
	saveRole(body): Promise<IHttpRes<any>> {
		return this.apiService.post('/sysRole/save', body).toPromise();
	}
	

	/**
	 * 获取组织列表
	 * @param params 
	 * @returns 
	 */
	getDepartList(params?): Promise<IHttpRes<Array<ISystemOrganize>>> {
		return this.apiService.get('/sysDepart/list', params ? params : null).toPromise();
	}


	/**
	 * 保存组织
	 * @param body 
	 * @returns 
	 */
	saveDepart(body): Promise<IHttpRes<any>> {
		return this.apiService.post('/sysDepart/save', body).toPromise();
	}
	/**
	 * 删除组织
	 * @param id 
	 * @returns 
	 */
	deleteDepart(id: number): Promise<IHttpRes<any>> {
		return this.apiService.post('/sysDepart/delete/' + id).toPromise();
	}





	/**
	 * 菜单列表
	 * @param params 
	 * @returns 
	 */
	getResourceList(): Promise<IHttpRes<Array<ISystemMenu>>> {
		return this.apiService.get('/sysResource/list').toPromise();
	}

	/**
	 * 菜单修改
	 * @param body 
	 * @returns 
	 */
	saveResource(body): Promise<IHttpRes<any>> {
		return this.apiService.post('/sysResource/save', body).toPromise();
	}

	/**
	 * 菜单删除
	 * @param id 
	 * @returns 
	 */
	deleteResource(id: number): Promise < IHttpRes < any >> {
		return this.apiService.post('/sysResource/delete/' + id).toPromise();
	}
}
